﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Shine.Util.Win32
{
    /// <summary>
    /// 动态连接库user32.dll
    /// </summary>
    public class User32Helper
    {
        /// <summary>
        /// 该函数在属于当前线程的指定窗口里设置鼠标捕获。
        /// 一旦窗口捕获了鼠标，所有鼠标输入都针对该窗口，无论光标是否在窗口的边界内。
        /// 同一时刻只能有一个窗口捕获鼠标。
        /// 如果鼠标光标在另一个线程创建的窗口上，只有当鼠标键按下时系统才将鼠标输入指向指定的窗口
        /// </summary>
        /// <remarks>
        /// 只有前台窗口才能捕获鼠标。如果一个后台窗口想捕获鼠标，则该窗口仅为其光标热点在该窗口可见部份的鼠标事件接收消息。
        /// 另外，即使前台窗口已捕获了鼠标，用户也可点击另一个窗口，将其调入前台。
        /// 当一个窗口不再需要所有的鼠标输入时，创建该窗口的线程应当调用函数ReleaseCapture来释放鼠标。
        /// 此函数不能被用来捕获另一进程的鼠标输入。 　
        /// </remarks>
        /// <param name="hwnd">当前线程里要捕获鼠标的窗口句柄</param>
        /// <returns>返回值是上次捕获鼠标的窗口句柄。如果不存在那样的句柄，返回值是NULL。</returns>
        [DllImport("user32.dll")]
        public static extern long SetCapture(int hwnd);
        /// <summary>
        /// 当一个窗口不再需要所有的鼠标输入时，创建该窗口的线程应当调用函数ReleaseCapture来释放鼠标。
        /// </summary>
        /// <returns></returns>
        [DllImport("user32.dll")]
        public static extern long ReleaseCapture();

    }
}
